1.使用jupyter notebook进行数据分析
2.jupyter matplotlib&numpy&pandas 库的入门&使用
3.Other 学习&复习&提高
1.从一堆数据中找到规律
2.找到规律并应用
3.图表化的展示&输出
summary 从数据中找到规律供用户使用
1.岗位需求
2.python数据科学的基础
3.机器学习课程的基础
前段js可以做到数据展示
后端数据库用于数据源的存储
数据分析用于二者的链接
模块用于高效的分析数据
1.数据分析问题一般不怎么清晰
分析问题
2.准备数据
读取数据
数据清洗
筛选和排除无效数据
3.分析数据
4.获得结论
→直接返回报告
5.结果可视化
图形图表可视化
2020年1月14日Unknow Timekey
样例1
from matplotlib import pyplot as plt
x = range(2,26,2)
y = [15,13,14,17,20,26,25,27,24,22,18,15]
plt.plot(x,y)
plt.show()
设置图片大小
fig = plt.figure(figsize = (20,8),dpi = 80)
figsize 元组
图片的保存要在绘图ploy命令之后,这样才能得到对应的图片
plt.savefig("path/filename.png")
plot.xticks(range(2,25))
调整xticks()中的数组以改变坐标轴密度
不显示就不传值
格式化x轴坐标及显示
print(["10点{}分".format(i) for i in range(60)])
# 定义元组
先查看系统支持的中文字体
常用的Linux 命令 TOP 20之一 fc-list 查看系统支持的字体
使用matplotlib.rc 方法修改
查看源码的方式
**font相当于直接引用列表中的参数
或者通过 font manager类来修改
14:05
解决中文不显示的问题 P6 11.05
看源码 修改Demo
设置字体的一种绝对有效的方法
P6 End
P7 Start
plt.xlabel("text") → 添加X轴标签 plt.ylabel("text") → 添加Y轴标签 plt.title("title") → 添加图表标题
P8
环境的配置&conda命令使用
模块的应用及配置
python 环境的创建
conda create -n python3.2 python=3
切换python环境
source activate python3
判断python版本 pip --version
sh脚本里面切换python环境
前面添加 source activate python3
Plot绘图
调用字体
绘制label
plt.grid()
以坐标轴作为网格
alpha = 0.4 range 0~1 参数含义为透明度
两条折线
调用两次plot方法
Plot(x,y,label = "tuli1")
plot(x,z,label = "tuli2")
多个参数的标记
在绘制的同时加Label标签
plt.legend() 增加图例 增加字体 添加Prop=My_font参数
legend 英[ˈledʒənd]
美[ˈledʒənd]
n. 传说; 传奇故事; (尤指某领域中的) 传奇人物; (地图或书中图表的) 图例,说明,解释;
[例句]The play was based on Irish legend.
这部戏取材于爱尔兰传说。
[其他] 复数:legends
legend()参数的使用
通过查看源码确定其位置
查看源码可以快速解决问题
查看源码定义其图例的位置 legend(...,loc = "upper left")
linestyle
可以定义在折线图,也可以定义网格线(的样式)
可以利用颜色的十六进制代码来定义(具体代码可以百度)
matplotlib的其他功能 → 其官方文档
去官网查看对应的图形,点击即可获取到对应的源码
官方demo
2020年2月9日17:26:26
直方图和条形图用于连续型&离散型数据的统计
散点图用于展示离群点(异常值)
plt.scatter(x,y)
绘制并调整散点图
设置图形格式等参数
x[::3] 取步长
最小二乘法 获取拟合直线
plt.bar() 绘制条形图的方法
坐标轴显示不完整
bar(...,width = 0.3)
控制条形图的宽度
2020年2月9日21:34:08
利用Python进行可视化的处理和操作
barh(...,height = 0.3)
频数统计(频率)
Other
展示连续的数据的分布情况
plt.hist(a,num_bins)
a为统计的原始数据
num_bins为定义的组数
利用数学统计方法来确定组数=极差/组距
科学的设置组距
num_bins 可以传入一个数组来定义直方图不同的组距
增加hist的参数 normed = true 用来绘制频数分布直方图
绘制直方图同时倾向于添加网格,用于确定组距
plt.hist() 方法能通过原始数据来得到直方图
不能通过统计之后的数据得到直方图
可以使用绘制条形图的方法进行绘制
interval 英[ˈɪntəvl]
美[ˈɪntərvl]
n. (时间上的) 间隔,间隙,间歇; (戏剧、电影或音乐会的) 幕间休息,休息时间; (其他事情) 穿插出现的间隙;
[例句]The ferry service has restarted after an interval of 12 years
时隔12年之后,轮渡服务又重新开通了。
[其他] 复数:intervals
调整X轴及组距绘制直方图 → 自行探索
1.明确问题
2.准备图形的呈现方式
3.准备数据
4.绘图和图形完善
eg. baidu.echart 炫酷的图形示例模板
有交互的效果,动态 js工具
需要只用制定格式的原始数据来套用模板即可
使用pandas和Numpy来整理数据
关系图 表示各个点之间的联系
官网选择Plot.ly 收费
与jupyter notebook兼容,利用jupyter来绘图
动态图表
静态图表
下个模块Numpy video P= 13
numpy用于处理数值型数据
快速 方便
科学计算的基础库
多用于大型和多维数组中的运算
数组:python中的列表&数学含义的矩阵&其他语言中的数组
import numpy as np
直接导入numpy库,但是库名太长,后面程序调用不变,则使用np代替numpy
numpy的数据类型为ndarray类型
np.array(range(10)) === np.arange(10)
生成一个长度为10的数组
可以定义起始和步长 方法和range相同
a.dtype 当前数组中存放的数据的数据类型
多了个complex(复数)类型
可以指定数据类型
a.array([1,2,3,4,5],dtype="int8")
调整数据类型
t6= t5.astype("int8")
random.random() for i in range(10)
保留指定位数的小数
np.round(a,2)
生成指定位数的随机小数
import random
"%.2f"%random.random()
>> 0.78
Numpy中数组的形状表示矩阵的行列数
多维数组 行 列 块
修改数组的形状
a.reshape(b,c) → 将a数组转为b行c列的数组
三维数组修改形状为a块b行c列
存在更高维度的数组,但是一般将其转换为二维数组处理
有返回值的方法一般不改变原始变量
这个与列表(list)中的extend方法&字典中的Update方法不同,后者往往会改变返回的原始变量
将元组转化为一维数组
注意(1,24)和(24,)的区别
t5.shape[0] → t5对应的行数
t5.shape[1] → t5对应的列数
t5.flatten() → t5按行展开为一维数组
官方文档中需要传入一个元组,急用()包含,其实直接输入数字也行
数组相加&Numpy中的广播机制
数组的计算类似于矩阵的计算,可以进行加减乘除
数组除零会出warning 数据类型为nan Inf
0/0为nan → not a number
数字/0为inf → infinite 无限
数组在某一维度上相同时,就可以进行计算
P = 16
相当于矩阵的向量
二维数组的轴 0表示行 1表示列
三维数组的轴 0表示块 1表示行 2表示列
二维和三维数组轴不同
一般不使用numpy读取数据,多使用pandas来读取数据,其功能更多 、 读取csv格式的文件
np.loadtxt()
filepath = "filepath"
np.loadtxt(filepath,delimiter = ",",dtpye = "int")
unpack 参数True表示数据的行列转置
t2.transpose() → 转置 方法
t2.T → 转置 属性
t2.swapaxes(1,2) → 交换轴
1.确定分析目的
2.确定呈现方式
3.确定数据处理方式
4.写代码
取出数组中制定的行或列
除过Xpath 下标不是从零开始,其余索引均为从零开始
取特定的行
取连续的行
取不连续的多行
取列
取连续的多列
取不连续的多列
取多行&多列
取制定的行和列的位置
取多个不相邻的点
取行和列交叉点的数据
方括号的区别
尾数取不到
先取到对应位置的数,在进行赋值
方括号可以对数组中的元素进行索引和切片
numpy中的布尔索引
np.where()
numpy中的clip(裁剪)
nan为float类型的数
数据缺失会产生nan
不合适的计算如无穷大减无穷大也会产生Nan
inf 无穷大 存在负无穷大
二者的type类型均为float
判断数组中nan的个数
np.count_nonzero(t2 != t2)
np.isnan(t2)
t2[np.isnan(t2)]=1
np.sum #数组求和
nan与任意数运算结果均为nan
将nan替换为均值/中值 直接删除该行
求和
中值
最大值
最小值
极值
标准差
计算统计参数是指定一个轴按行或按列计算
练习
竖直拼接&水平拼接
np.hstack() 水平评价
np.vstack() 竖直拼接
数组的行列变换
类似于交换赋值 PPT page 93
构造全为零的数组
np.zeros(a,b) → 构建a行b列的全为零的数组
数据中包含多种结构的数据,(比如数值型和字符型的数据),则需要用Pandas对数据进行预处理
使用Pandas处理非数值型数据,使用Numpy处理数值型数据
在模块pypi网站上可以下载到.whl对应安装包和.tar.gz格式的压缩包文件
.whlcmd命令该目录下直接使用pip install 安装
.tar.gz格式的安装包
1.下载之后解压,得到压缩包内的setup.py
2.使用python setup.py install 来安装对应模块
series 一维的带标签的数组
标签表示数组的索引
可以手动给索引赋值
1.手动创建
pd.Series([1,2,3],index = list("adc"))
2.通过字典来创建
pd.Series(dict)
键值对转化为索引和值的序列
Series的类型和Numpy类似,有int,float和object区分
使用astype来相互转化
t2.astype(float)
根据索引对Series进行切片,取出对应的值
直接取Series中对应的值
取连续和不连续的值
布尔索引
如果Series中没有对应的值,则返回NaN
index
value
其属性可遍历,可迭代
获取长度,获取其中的数据,可以强制转化为list
series也有where方法,但其方法和Numpy中有区别
读取csv的方法
import pandas as pd
df = pd.read_csv("csv_path") #引号内填入csv的路径
print(df)
pandas支持读取的数据源
使用方法百度
pd.read_csv
pd.read_clipboard
pd.read_html
pd.read_json
pd.read_sql
pd.read_sql_query
pd.read_sql_table
...
读取MongoDB
from pymongo import MongoClient
import pandas as pd
client = MongoClient()
collection = Client["douban"]["tv1"]
data = list(collection.find())
t1 = data[0]
t1 = pd.Series(t1)
print(t1)
二维的DataFrame是Series的容器
竖着的一列为Index 横的的为columns
对应列索引和行索引(0轴和1轴)
t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))
d1 = {"name":["Tom","Jerry"],"age":[22,23],"tel":[123,456]}
字典的键作为DataFrame的列缩影
字典的值若确实,则显示为NaN
遍历数据
t3 = t2.index
t4 = t2.columns
t5 = t2.values
t6 = t2.dtypes
t6 = t2.ndim 数据的维度
t2.head(1) 默认显示前五行
t2.tail() 显示后五行
t2.info() 显示相关信息
t2.describe() 显示相关统计信息
DataFrame中排序的方法
True代表升序,False代表降序
df.sort_values(by = "LotID",ascending=False) #按照某一列进行排序
panda取行或者取列的注意事项
方括号取数字表示对行操作,字符串表示对列进行操作
t1.loc["1","b"] #直接使用呢方括号取值和取列
t1.loc["1"]
t1.loc[:,"b"]
t1.loc["1",:]
冒号在loc方法中时闭合的,括号内是可以选中的
t1.loc[["2","3"]] #两个方括号
t1.iloc[:,2]
t1.iloc[:,[2,1]]
获取后也可以进行赋值
import pandas as pd
import numpy as np
t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))
d1 = {"name":["Tom","Jerry"],"age":[22,23],"tel":[123,456]} #定义一个字典
t2 = pd.DataFrame(d1)
t3 = t2.index
t4 = t2.columns
t5 = t2.values
#print(t2,"\n",t3,"\n",t4,"\n",t5)
t6 = t2.ndim
t7 = t2.describe()
df = pd.read_csv("data.csv")
df.head()
df.sort_values(by = " AreaNo",ascending=True) #按照某一列进行排序 True代表升序,False代表降序
#print(df[2:21][" AreaNo"])
#print(df[2:21])
#print(df[2:3])
t1
t1.loc["1","b"] #直接使用呢方括号取值和取列
t1.loc["1"]
t1.loc["1",:]
t1.loc[["2","3"]]
t1.iloc[:,2]
t1.iloc[:,[2,1]]
print(df.Recipe.str.split(".").tolist())
df[df["a"]>30] #单个条件
多个条件使用&符号链接
&表示且 |表示或
df[(df["a"]>30)&(df["a"]<40)] #单个条件
print(df.Recipe.str.split("."))
排除nan项目,并使用平均值来填充
isnull()/notnull()方法判断为NaN
t3[pd.notnull(t3["W"])] #布尔索引 选中True的该行
删除NaN数字
方法dropna()
inplace参数就地修改
爬虫爬取的数据通常会存放于MongoDB中,因为空值可以被填充
MySQL中无法存入空值,只能放入Null
使用布尔索引将0值替换为NaN,使其不参与运算
import pandas as df
from matplotlib import pyplot as plt
filepath = "data.csv"
df = df.read_csv(filepath)
#print(df.head(3))
#print(df.info())
#展示数据的分布情况→ 连续数据的统计:直方图
#准备数据
#data = df[" AreaX"] #一个series类型的数据
data = df[" AreaX"].values #ndarray 多维数组类型
max_data = data.max()
min_data = data.min()
#计算组数
num_bin = (max_data - min_data)//100
# 设置图形的大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data,num_bin)
plt.xticks(range(max_data,min_data,5))
plt.show()
#max_data
'''
#解决横轴不能展示小数界别的问题
_x = [min_data]
i = min_data
while i<= max_data:
i = i + 500
_x.append(i)
print(_x)
'''
### 解决制定分组的问题
join 把行索引相同的项目合并在一起
MongoDB中的分组与聚合
打开数据,查看前几项数据和数据Info,获取数据的基本信息
df.groupby(by = "group_name")
返回dataframegroupby的一个对象
1.遍历
分组之后的对象可以迭代,其类型为一个元组
前面是个标签 后面的值为一个dataframe
通过循环来遍历groupby对象
2.调用聚合的方法
grouped["brand"].count()
中位数,平均值都能进行统计
常见的聚合方法 PPT Page 132
返回带有两个索引的series数据
在Brand前多加一个方括号
方括号嵌套表示取多列,会返回Dataframe对象
两个索引的索引称为复合索引
获取index
给index重新赋值df.index/df.reindex
指定某一列为index df.set_index()
其中包含drop参数
index是可迭代对象,所以求长度,转化为列表
可以通过groupby方法或者index赋值得到复合索引
复合索引的取值
内外两层index,可以通过swaplevel之后在取值